package com.hzw.saas.web.hbox.service;

import java.util.List;

import com.hzw.saas.web.hbox.bo.LocChunkBO;


/**
 * @author zzl
 * @since 03/12/2021
 */
public interface ILocChunkService {

    /**
     * 获取分片信息
     *
     * @param fileId       文件ID
     * @param chunkCatalog 分片虚拟目录
     * @param startBytes   起始字节数
     * @param endBytes     结束字节数
     * @param digest       文件摘要，可选。若传递，则会同时校验摘要
     * @return 符合参数的分片信息
     */
    boolean exist(String fileId, String chunkCatalog, long startBytes, long endBytes, String digest);

    /**
     * 获取分片信息
     *
     * @param fileId       文件ID
     * @param chunkCatalog 分片虚拟目录
     * @param startBytes   起始字节数
     * @param endBytes     结束字节数
     * @param digest       文件摘要，可选。若传递，则会同时校验摘要
     * @return 符合参数的分片信息
     */
    LocChunkBO getChunk(String fileId, String chunkCatalog, long startBytes, long endBytes, String digest);

    /**
     * 获取文件的分片信息
     *
     * @param chunkCatalog 分片虚拟目录
     * @param fileId       文件ID
     * @return 文件分片信息列表
     */
    List<LocChunkBO> listChunks(String fileId, String chunkCatalog);

    /**
     * 保存文件分片数据
     *
     * @param chunkCatalog 分片虚拟目录
     * @param chunk    分片信息
     * @param chunkData    分片数据
     * @return 保存的文件分片数据，含生成的chunkId
     */
    LocChunkBO saveChunk(String chunkCatalog, LocChunkBO chunk, byte[] chunkData);

    /**
     * 合并文件分片
     *
     * @param fileId       文件ID
     * @param chunkCatalog 分片虚拟目录
     * @param chunkIdList  待合并的分片ID列表
     */
    void mergeChunks(String fileId, String chunkCatalog, List<String> chunkIdList);

    /**
     * 删除文件的所有分片
     *
     * @param chunkCatalog 分片虚拟目录
     * @param fileId       文件ID
     */
    void deleteChunks(String fileId, String chunkCatalog);

}
